tmpl/gdk-pixbuf.sgml \
tmpl/gnome-canvas-pixbuf.sgml \
tmpl/refcounting.sgml \
- tmpl/rendering.sgml
+ tmpl/rendering.sgml \
+ tmpl/util.sgml
gdk_pixbuf_docdir = $(HTML_DIR)
gdk_pixbuf_doc_DATA = \
<RETURNS>GdkPixbuf *</RETURNS>
const gchar **data
</FUNCTION>
+<FUNCTION>
+<NAME>gdk_pixbuf_add_alpha</NAME>
+<RETURNS>GdkPixbuf *</RETURNS>
+GdkPixbuf *pixbuf, gboolean substitute_color,guchar r, guchar g, guchar b
+</FUNCTION>
<ENUM>
<NAME>GdkPixbufAlphaMode</NAME>
typedef enum {
gdk_pixbuf_render_threshold_alpha
</SECTION>
+<SECTION>
+<FILE>util</FILE>
+gdk_pixbuf_add_alpha
+</SECTION>
+
<SECTION>
<FILE>gnome-canvas-pixbuf</FILE>
GNOME_CANVAS_PIXBUF
<!entity gdk-pixbuf-file-loading SYSTEM "sgml/file-loading.sgml">
<!entity gdk-pixbuf-creating SYSTEM "sgml/creating.sgml">
<!entity gdk-pixbuf-rendering SYSTEM "sgml/rendering.sgml">
+<!entity gdk-pixbuf-util SYSTEM "sgml/util.sgml">
<!entity GnomeCanvasPixbuf SYSTEM "sgml/gnome-canvas-pixbuf.sgml">
<!entity GdkPixbufLoader SYSTEM "sgml/gdk-pixbuf-loader.sgml">
]>
&gdk-pixbuf-file-loading;
&gdk-pixbuf-creating;
&gdk-pixbuf-rendering;
+ &gdk-pixbuf-util;
&GnomeCanvasPixbuf;
&GdkPixbufLoader;
</reference>
<SIGNAL>
<NAME>GdkPixbufLoader::area-updated</NAME>
<RETURNS>void</RETURNS>
-GdkPixbufLoader *loader
-gint x
-gint y
-gint width
-gint height
+GdkPixbufLoader *gdkpixbufloader
+gint arg1
+gint arg2
+gint arg3
+gint arg4
</SIGNAL>
<SIGNAL>
<NAME>GdkPixbufLoader::area-prepared</NAME>
<RETURNS>void</RETURNS>
-GdkPixbufLoader *loader
+GdkPixbufLoader *gdkpixbufloader
</SIGNAL>
<SIGNAL>
<NAME>GdkPixbufLoader::closed</NAME>
<RETURNS>void</RETURNS>
-GdkPixbufLoader *loader
+GdkPixbufLoader *gdkpixbufloader
</SIGNAL>
areas of an image that is being loaded.
</para>
+@gdkpixbufloader: the object which received the signal.
+@arg1:
+@arg2:
+@arg3:
+@arg4:
+<!-- # Unused Parameters # -->
@loader: Loader which emitted the signal.
@x: X offset of upper-left corner of the updated area.
@y: Y offset of upper-left corner of the updated area.
fetch the partially-loaded pixbuf.
</para>
+@gdkpixbufloader: the object which received the signal.
+<!-- # Unused Parameters # -->
@loader: Loader which emitted the signal.
<!-- ##### SIGNAL GdkPixbufLoader::closed ##### -->
drives it.
</para>
+@gdkpixbufloader: the object which received the signal.
+<!-- # Unused Parameters # -->
@loader: Loader which emitted the signal.
<!--
linkend="GnomeCanvasPixbuf--x">x</link> argument.
</para>
-
-<!--
-Local variables:
-mode: sgml
-sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
-End:
--->
-
<!-- ##### ARG GnomeCanvasPixbuf:y_set ##### -->
<para>
Determines whether the <link
The default is %FALSE.
</para>
+<!--
+Local variables:
+mode: sgml
+sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
+End:
+-->
@dest_y:
@width:
@height:
-@alpha_threshold: <!--
+@alpha_threshold:
+
+<!--
Local variables:
mode: sgml
sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
--- /dev/null
+<!-- ##### SECTION Title ##### -->
+Utilities
+
+<!-- ##### SECTION Short_Description ##### -->
+Utility and miscellaneous convenience functions.
+
+<!-- ##### SECTION Long_Description ##### -->
+ <para>
+ These functions provide miscellaneous utilities for manipulating
+ pixbufs. The pixel data in pixbufs may of course be manipulated
+ directly by applications, but several common operations can be
+ performed by these functions instead.
+ </para>
+
+<!-- ##### SECTION See_Also ##### -->
+ <para>
+ #GdkPixbuf
+ </para>
+
+<!-- ##### FUNCTION gdk_pixbuf_add_alpha ##### -->
+<para>
+
+</para>
+
+@pixbuf:
+@substitute_color:
+@r:
+@g:
+@b:
+@Returns:
+
+
+<!--
+Local variables:
+mode: sgml
+sgml-parent-document: ("../gdk-pixbuf.sgml" "book" "refsect2" "")
+End:
+-->
+1999-12-02 Federico Mena Quintero <federico@redhat.com>
+
+ * src/gdk-pixbuf-util.c: New file with utility and convenience
+ functions for pixbufs.
+
+ * src/Makefile.am (libgdk_pixbuf_la_SOURCES): Added gdk-pixbuf-util.c.
+
+ * doc/gdk-pixbuf-sections.txt: Added section for utility functions.
+
+ * doc/Makefile.am (tmpl_sources): Added tmpl/util.sgml.
+
+ * doc/gdk-pixbuf.sgml: Added the utilities section.
+
+ * doc/tmpl/util.sgml: Documentation for the utility functions.
+
1999-11-29 Owen Taylor <otaylor@redhat.com>
* src/gdk-pixbuf-render.c (gdk_pixbuf_render_to_drawable_alpha):
gdk-pixbuf-loader.c \
gdk-pixbuf-render.c \
gdk-pixbuf-drawable.c \
+ gdk-pixbuf-util.c \
$(CANVAS_SOURCEFILES)
libgdk_pixbuf_la_LDFLAGS = -version-info 1:0:0
--- /dev/null
+/* GdkPixbuf library - Utilities and miscellaneous convenience functions
+ *
+ * Copyright (C) 1999 The Free Software Foundation
+ *
+ * Author: Federico Mena-Quintero <federico@gimp.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#include <config.h>
+#include "gdk-pixbuf/gdk-pixbuf.h"
+
+\f
+
+/**
+ * gdk_pixbuf_add_alpha:
+ * @pixbuf: A pixbuf.
+ * @substitute_color: Whether to substitute a color for zero opacity. If this
+ * is #FALSE, then the (@r, @g, @b) arguments will be ignored.
+ * @r: Red value to substitute.
+ * @g: Green value to substitute.
+ * @b: Blue value to substitute.
+ *
+ * Takes an existing pixbuf and adds an alpha channel to it. If the original
+ * pixbuf already had alpha information, then the contents of the new pixbuf are
+ * exactly the same as the original's. Otherwise, the new pixbuf will have all
+ * pixels with full opacity if @substitute_color is #FALSE. If
+ * @substitute_color is #TRUE, then the color specified by (@r, @g, @b) will be
+ * substituted for zero opacity.
+ *
+ * Return value: A newly-created pixbuf with a reference count of 1.
+ **/
+GdkPixbuf *
+gdk_pixbuf_add_alpha (GdkPixbuf *pixbuf, gboolean substitute_color, guchar r, guchar g, guchar b)
+{
+ ArtPixBuf *apb;
+ ArtPixBuf *new_apb;
+ GdkPixbuf *new_pixbuf;
+ int x, y;
+
+ g_return_val_if_fail (pixbuf != NULL, NULL);
+
+ apb = pixbuf->art_pixbuf;
+ g_return_val_if_fail (apb->format == ART_PIX_RGB, NULL);
+ g_return_val_if_fail (apb->n_channels == 3 || apb->n_channels == 4, NULL);
+ g_return_val_if_fail (apb->bits_per_sample == 8, NULL);
+
+ if (apb->has_alpha) {
+ new_apb = art_pixbuf_duplicate (apb);
+ if (!new_apb)
+ return NULL;
+
+ return gdk_pixbuf_new_from_art_pixbuf (new_apb);
+ }
+
+ new_pixbuf = gdk_pixbuf_new (ART_PIX_RGB, TRUE, 8, apb->width, apb->height);
+ if (!new_pixbuf)
+ return NULL;
+
+ new_apb = new_pixbuf->art_pixbuf;
+
+ for (y = 0; y < apb->height; y++) {
+ guchar *src, *dest;
+ guchar tr, tg, tb;
+
+ src = apb->pixels + y * apb->rowstride;
+ dest = new_apb->pixels + y * new_apb->rowstride;
+
+ for (x = 0; x < apb->width; x++) {
+ tr = *dest++ = *src++;
+ tg = *dest++ = *src++;
+ tb = *dest++ = *src++;
+
+ if (substitute_color && tr == r && tg == g && tb == b)
+ *dest++ = 0;
+ else
+ *dest++ = 255;
+ }
+ }
+
+ return new_pixbuf;
+}
ArtDestroyNotify dfunc, gpointer dfunc_data);
GdkPixbuf *gdk_pixbuf_new_from_xpm_data (const gchar **data);
+/* Adding or removing alpha */
+
+GdkPixbuf *gdk_pixbuf_add_alpha (GdkPixbuf *pixbuf, gboolean substitute_color,
+ guchar r, guchar g, guchar b);
+
/* Rendering to a drawable */
typedef enum {